跳到主要内容

编写 Excel 配置文件加载模块

  欢迎来到Dora SSR游戏引擎横版2D游戏开发教程的第八篇!在这篇教程中,我们将介绍如何加载Excel格式的配置文件。这个模块主要做一件事:加载Excel表格为Lua的table,然后经过处理后创建在ECS系统中对应的游戏道具实体对象,并交给之前的教程提到的ECS系统进行逻辑处理。

  首先,我们需要引入一些必要的模块:

Script/Loader.tl
local Content <const> = require("Content")
local Group <const> = require("Group")
local Entity <const> = require("Entity")
local Utils <const> = require("Utils")
local Struct <const> = Utils.Struct

  接下来,我们将加载名为"Data/items.xlsx"的Excel文件,这个文件包含一个名为"items"的表格。这个表格的内容如下:

结构名称序号道具名称道具X坐标道具数量道具图标道具描述
StructNoNameXNumIconDesc
Item1道具101Model/patreon.clip|whale描述1
Item2道具23002Model/patreon.clip|cow描述2
Item3道具36003Model/patreon.clip|sloth描述3
Item4道具49004Model/patreon.clip|panda描述4
Item5道具5-3005Model/patreon.clip|rabbit描述5

  在使用Teal语言的时候,我们可以先定义一个当加载Excel数据后要转换为的Lua对象的结构。

Script/Loader.tl
local record ItemEntity
name: string
no: number
x: number
icon: string
num: number
desc: string
item: boolean
end

  然后我们就可以开始编写Excel文件加载的处理函数,执行加载主要是使用Content:loadExcel()函数。

Script/Loader.tl
function loadExcel()
local xlsx = Content:loadExcel("Data/items.xlsx", {"items"})
if not xlsx is nil then
local its = xlsx["items"]
-- 从第二行数据获取到程序访问的字段名称数组
local names = its[2] as {string}
-- 从字段名称数组中删除不包含字段名称的第一列数据
table.remove(names, 1)
-- 创建名称为Item的Struct数据对象定义
if not Struct:has("Item") then
Struct.Item(names)
end
-- 从ECS系统中删除所有包含item组件的实体
Group{"item"}:each(function(e: Entity.Type): boolean
e:destroy()
end)
-- 从第三行开始遍历Excel数据
for i = 3, #its do
local st = Struct:load(its[i])
local item <total>: ItemEntity = {
name = st.Name as string,
no = st.No as number,
x = st.X as number,
num = st.Num as number,
icon = st.Icon as string,
desc = st.Desc as string,
item = true
}
Entity(item)
end
end
end

  最后我们定义一个Loader对象作为模块返回的结果,供其它模块访问调用。

Script/Loader.tl
local record Loader
type ItemEntity = ItemEntity
loadExcel: function()
end
Loader.loadExcel = loadExcel
return Loader

  在上述代码中,我们首先加载了Excel文件,并获得了直接包含文件数据的Lua的table对象。然后,我们从table中获取了表头,并将其用于创建一个名为"Item"的Struct数据对象的定义。接着,我们遍历了ECS系统中所有现有的带有"item"组件的道具实体,并将它们销毁。最后,我们遍历了Excel表格中的每一行数据,将每一行的数据转换为一个Struct对象,并用这个对象访问各种数据字段创建的新的游戏道具实体,并触发后续在ECS系统中执行的游戏实体的处理逻辑。

  至此,我们的Excel配置文件加载模块就编写完成了。在接下来的教程中,我们将使用这些加载的数据来创建游戏角色和实现游戏逻辑。希望你能跟上我们的步伐,一起学习Dora SSR游戏引擎的使用方法!